from kb import KMKKeyboard

from kmk.extensions.media_keys import MediaKeys
from kmk.keys import KC
from kmk.modules.layers import Layers

keyboard = KMKKeyboard()

keyboard.modules.append(Layers())
keyboard.extensions.append(MediaKeys())

# fmt:off
keyboard.keymap = [
    [
     # QWERTY
     # ┌─────────┬─────────┬─────────┬─────────┬─────────┐         ┌─────────┬─────────┬─────────┬─────────┬─────────┐
        KC.Q,     KC.W,     KC.E,     KC.R,     KC.T,               KC.Y,     KC.U,     KC.I,     KC.O,     KC.P,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.A,     KC.S,     KC.D,     KC.F,     KC.G,               KC.H,     KC.J,     KC.K,     KC.L,     KC.SCLN,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.Z,     KC.X,     KC.C,     KC.V,     KC.B,               KC.N,     KC.M,     KC.COMM,  KC.DOT,   KC.ENT,
     # └─────────┴─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴─────────┴─────────┘
                                 KC.LCTL,  KC.MO(1), KC.SPC,   KC.BSPC,  KC.LSFT,  KC.MO(2)
     #                          └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
    ],
    [
     # NUM_NAV
     # ┌─────────┬─────────┬─────────┬─────────┬─────────┐         ┌─────────┬─────────┬─────────┬─────────┬─────────┐
        KC.TAB,   KC.N7,    KC.N8,    KC.N9,    KC.GRV,             KC.MPRV,  KC.PGUP,  KC.UP,    KC.PGDN,  KC.DEL,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.ESC,   KC.N4,    KC.N5,    KC.N6,    KC.N0,              KC.MPLY,  KC.LEFT,  KC.DOWN,  KC.RIGHT, KC.RSFT,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.LALT,  KC.N1,    KC.N2,    KC.N3,    KC.TILD,            KC.MNXT,  KC.HOME,  KC.INS,   KC.END,   KC.RALT,
     # └─────────┴─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴─────────┴─────────┘
                                 KC.LCTL,  KC.TRNS,  KC.SPC,   KC.BSPC,  KC.LGUI,  KC.MO(3)
     #                          └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
    ],
    [
     # SYMBOLS
     # ┌─────────┬─────────┬─────────┬─────────┬─────────┐         ┌─────────┬─────────┬─────────┬─────────┬─────────┐
        KC.TAB,   KC.AMPR,  KC.ASTR,  KC.BSLS,  KC.LBRC,            KC.RBRC,  KC.UNDS,  KC.PLUS,  KC.DQUO,  KC.DEL,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.ESC,   KC.DLR,   KC.PERC,  KC.CIRC,  KC.LPRN,            KC.RPRN,  KC.MINS,  KC.EQUAL, KC.QUOT,  KC.SLSH,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.LALT,  KC.EXLM,  KC.AT,    KC.HASH,  KC.LCBR,            KC.RCBR,  KC.PIPE,  KC.SCLN,  KC.COLN,  KC.QUES,
     # └─────────┴─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴─────────┴─────────┘
                                 KC.LCTL,  KC.MO(3), KC.SPC,   KC.BSPC,  KC.LSFT,  KC.TRNS
     #                          └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
    ],
    [
     # FUNCTION
     # ┌─────────┬─────────┬─────────┬─────────┬─────────┐         ┌─────────┬─────────┬─────────┬─────────┬─────────┐
        KC.RESET, KC.F7,    KC.F8,    KC.F9,    KC.F12,             KC.PSCR,  KC.NO,    KC.NO,    KC.NO,    KC.NO,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.CAPS,  KC.F4,    KC.F5,    KC.F6,    KC.F11,             KC.SCRL,  KC.NO,    KC.NO,    KC.NO,    KC.NO,
     # ├─────────┼─────────┼─────────┼─────────┼─────────┤         ├─────────┼─────────┼─────────┼─────────┼─────────┤
        KC.NO,    KC.F1,    KC.F2,    KC.F3,    KC.F10,             KC.PAUS,  KC.NO,    KC.NO,    KC.NO,    KC.NO,
     # └─────────┴─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴─────────┴─────────┘
                                 KC.NO,    KC.TRNS,  KC.NO,    KC.NO,    KC.NO,    KC.TRNS
     #                          └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
    ],
]
# fmt:on

if __name__ == '__main__':
    keyboard.go()
